package com.neuedu.controller.backend;

import com.neuedu.common.Const;
import com.neuedu.common.JSONData;
import com.neuedu.pojo.Category;
import com.neuedu.pojo.UserInfo;
import com.neuedu.service.CategoryService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;

import javax.servlet.http.HttpSession;
import java.util.List;

@Controller
@RequestMapping("/manager/category")
@Api(value = "分类管理模块开发",description = "分类管理模块开发")
public class CategoryController {

    @Autowired
    private CategoryService categoryService;

    @ApiOperation(value = "增加分类信息",notes = "增加分类信息",httpMethod = "POST")
    @RequestMapping(value = "addCategory",method = RequestMethod.POST)
    @ResponseBody
    public JSONData<String> addCategory(HttpSession session,String categoryName,
                                        @RequestParam(value = "parentId",defaultValue = "0") Integer parentId){

        //1、判断用户是否登录
        UserInfo userInfo = (UserInfo) session.getAttribute(Const.CURRENT_USERINFO);
        if(userInfo == null){
            return JSONData.buildError("用户未登录，请先登录");
        }
        //2、判断其是否是管理员用户 管理员：0  普通用户：1
        if(userInfo.getRole() == 0){
            // 3、分类信息添加
            JSONData data = categoryService.addCategory(categoryName,parentId);
            return data;
        }else{
            return JSONData.buildError("此用户无权限，请联系管理员！");
        }

    }
    @ApiOperation(value = "通过ID修改分类信息",notes = "通过ID修改分类信息",httpMethod = "POST")
    @RequestMapping(value = "updateCategoryById",method = RequestMethod.POST)
    @ResponseBody
    public JSONData<String> updateCategoryById(HttpSession session,String categoryName,Integer categoryId){
        // 1、判断用户是否登录
        UserInfo userInfo = (UserInfo) session.getAttribute(Const.CURRENT_USERINFO);
        if(userInfo == null){
            return JSONData.buildError("用户未登录，请先登录");
        }
        //2、 判断其是否是管理员
        if(userInfo.getRole()==0){
            // 3、分类信息的修改
            JSONData data = categoryService.updateCategoryById(categoryName,categoryId);
            return data;
        }else{
            return JSONData.buildError("此用户无权限，请联系管理员！");
        }
    }

    /**
     *  获取某个节点下的子节点（不在深入获取）
     */
    @ApiOperation(value = "通过节点ID获取其子节点",notes = "通过节点ID获取其子节点",httpMethod = "POST")
    @RequestMapping(value = "selAllChildrenByCategoryId",method = RequestMethod.POST)
    @ResponseBody
    public JSONData<List<Category>> selAllChildrenByCategoryId(HttpSession session,Integer categoryId){
        // 1、判断用户是否登录
        UserInfo userInfo = (UserInfo) session.getAttribute(Const.CURRENT_USERINFO);
        if(userInfo == null){
            return JSONData.buildError("用户未登录，请先登录");
        }
        //2、 判断其是否是管理员
        if(userInfo.getRole()==0){
            // 3、获取子节点
            JSONData<List<Category>> data = categoryService.selAllChildrenByCategoryId(categoryId);
            return data;
        }else{
            return JSONData.buildError("此用户无权限，请联系管理员！");
        }
    }

    /**
     *  获取节点下的子节点，深入获取子节点的内容（子节点下的子节点......）
     */
    @ApiOperation(value = "通过节点ID深入获取其子节点",notes = "通过节点ID深入获取其子节点",httpMethod = "POST")
    @RequestMapping(value = "selAllChildrenAndDeepByCategoryId",method = RequestMethod.POST)
    @ResponseBody
     public JSONData<Category> selAllChildrenAndDeepByCategoryId(HttpSession session,Integer categoryId){
         // 1、判断用户是否登录
         UserInfo userInfo = (UserInfo) session.getAttribute(Const.CURRENT_USERINFO);
         if(userInfo == null){
             return JSONData.buildError("用户未登录，请先登录");
         }
         //2、 判断其是否是管理员
         if(userInfo.getRole()==0){
             // 3、深入获取子节点
             JSONData<Category> data = categoryService.selAllChildrenAndDeepByCategoryId(categoryId);
             return data;
         }else{
             return JSONData.buildError("此用户无权限，请联系管理员！");
         }
     }

    /**
     *  需求：如果节点下有子节点，则提示其不能删除
     *
     */
    @ApiOperation(value = "通过ID删除节点",notes = "通过ID删除节点",httpMethod = "POST")
    @RequestMapping(value = "delCategoryById",method = RequestMethod.POST)
    @ResponseBody
     public JSONData<String> delCategoryById(HttpSession session,Integer categoryId){
         // 1、判断用户是否登录
         UserInfo userInfo = (UserInfo) session.getAttribute(Const.CURRENT_USERINFO);
         if(userInfo == null){
             return JSONData.buildError("用户未登录，请先登录");
         }
         //2、 判断其是否是管理员
         if(userInfo.getRole()==0){
             // 3、删除节点 - 判断节点下是否有子节点
             JSONData<String> data = categoryService.checkCategoryIsHavChild(categoryId);
                    //包含子节点不能被删除
             if(data.getCode()==-1){
                 return data;
             }
             // 4、删除节点
             data = categoryService.delCategoryById(categoryId);
             return data;
         }else{
             return JSONData.buildError("此用户无权限，请联系管理员！");
         }
     }

}
